prompt 门诊国家医保接口日志:【1101】人员基本信息获取_确认 create or replace procedure SP_SF_GJYBQR_MZXXHQ( PYBJKID in varchar2 ,--[1]输入:医保接口ID PJKCJBM in varchar2 ,--[2]输入:接口场景编码 PBRID00 in number ,--[3]输入:BRID00 PGHID00 in number ,--[4]输入:GHID000 PGHH000 in varchar2 ,--[5]输入:GHH000 PCZY000 in number ,--[6]输入:操作员编码 PCZYXM0 in varchar2 ,--[7]输入:操作员姓名 PCZYKS0 in number ,--[8]输入:操作员科室 PQQCSID in varchar2 default '' ,--[9]输入:参数中间ID PINXML0 in varchar2 default '' ,--[10]输入:请求参数(XML) POTHER0 in varchar2 default '' ,--[11]输入:备用参数 PCOMMIT in varchar2 default 'N' ,--[12]输入:是否提交事务 Y:提交 N:不提交 PZXZT00 out number ,--[13]输出:执行状态 0:失败 1:成功 POUTXML out varchar2 ,--[14]输出:出参(XML) PERRMSG out varchar2 --[15]输出:错误信息 ) as -- MODIFICATION HISTORY -- Person Date Comments --zhangyc 2022.01.18 created by MZSF-20220118-004 --zhangyc 2022.01.24 接口优化 by MZSF-20220124-004 --zhangyc 2022.01.27 mdtrt_cert_no:就诊凭证编号 未返回取入参 by MZSF-20220127-001 --zhangyc 2022.02.08 调用解析接口返回信息:(国家医保:SP_SF_nation_JKFHJX、福建版本:SP_SF_NEWYBJK_JKFHJX) by MZSF-20220208-002 --zhangyc 2022.02.10 修改BM_BRXXB0.psn_no by MZSF-20220215-002 --zhangyc 2022.02.17 解析节点INFNLX、QQJDBS、FHJDBS by MZSF-20220217-005 --zhangyc 2022.03.10 修正LS_BALC_TO_AKC087为空报错 by MZSF-20220310-002 --zhangyc 2022.03.25 增加精准扶贫判断:1101接口返回的idetinfo 身份类型为( '236103', '236113','236109','2302','236111' ) 的人员为精准扶贫人员 by MZSF-20220325-001 --zhangyc 2022.04.01 增加校验参保信息列表(insuinfo)为空报错 by “参保异常,请核对参保对应医保卡所在地的参保信息” by MZSF-20220402-001 --zhangyc 2022.04.06 优化过程 by by MZSF-20220407-002 --zhangyc 2022.04.18 解析baseinfo.exp_content(jzfp_flag=1) by MZSF-20220419-001 --zhangyc 2022.04.20 获取基本信息优化 by MZSF-20220420-002 --zhangyc 2022.11.14 BM_BRXXB0.ZJLXBH varchar2(5)改为varchar2(10) by MZSF-20221114-004 --zhangyc 2023.01.29 根据通用字典参数jzfp_flag_ma_psn_flag设置,更新SFJZFP(是否精准扶贫)或SFYLJZ(是否医疗救助) by MZSF-20230129-002 --zhangyc 2023.02.06 修改psn_insu_stas_mc显示(人员参保状态 0:未参保 1:正常参保 2:暂停参保 3:终止参保) by MZSF-20230206-002 --zhangyc 2023.10.24 解析exp_content中节点cred_pay_flag:信用支付标识:1已开通信用协议,0未开通信用协议以及调用SP_XT_BM_ZY_BRQTXX生成BM_BRQTXX 病人其它信息表 by MZSF-20231025-001 --zhangyc 2024.03.28 如果入参和医保返回psn_cert_type<>01身份证不校验身份证号和姓名 -------------------------- 请求报文:("psn_cert_type": "99","certno": "GBR0136830898","psn_name": "ALEXANDERSEBASTIANOLEG")返回报文:("psn_cert_type": "08","certno": "136830898","psn_name": "ALEXANDERSEBASTIANOLEG") -- --------- ---------- ------- LS_COUNT0 number(12,2); LS_CZRQ00 char(8); LS_CZSJ00 char(8); LS_INFNLX BM_TYCJBM.INFNLX%type;--:[国家医保]交易类型 1:直接调用医保DLL 3:调用服务接口 LS_QQJDBS BM_TYCJBM.QQJDBS%type;--:请求节点标识 LS_FHJDBS BM_TYCJBM.FHJDBS%type;--:返回节点标识 LS_JKZT00 SF_YBJKRZ.JKZT00%type; --接口状态 0:HIS请求成功 1:接口交互成功 2:HIS院内更新成功 LS_YBZXMC BM_TYZD00.MC0000%type; --默认医保中心名称 LS_psn_name_to_aac003 SF_YBJKRZ.AAC003%type; --姓名 LS_psn_cert_type_to_aac058 SF_YBJKRZ.AAC058%type; --证件类型 LS_aac058_mc SF_YBJKRZ.AAC058_MC%type; --证件类型名称 LS_certno_to_aac002 SF_YBJKRZ.AAC002%type; --证件号码(社会保障号) LS_aaz500 SF_YBJKRZ.AAZ500%type; --社会保障卡号 LS_psn_no SF_YBJKRZ.psn_no%type; --个人管理码 LS_brdy_to_aac006 SF_YBJKRZ.AAC006%type; --出生日期 LS_gend_to_aac004 SF_YBJKRZ.AAC004%type; --性别编码 LS_aac004_mc SF_YBJKRZ.AAC004_MC%type; --性别名称 LS_psn_insu_date_to_aab050 SF_YBJKRZ.AAB050%type; --参保日期 LS_aab001 SF_YBJKRZ.AAB001%type; --单位编号 LS_emp_name_to_aab004 SF_YBJKRZ.AAB004%type; --单位名称 LS_aab034 SF_YBJKRZ.AAB034%type; --所属经办机构编码(分中心) LS_aab034_mc SF_YBJKRZ.AAB034_MC%type; --所属经办机构编码名称 LS_insuplc_admdvs_to_aab301 SF_YBJKRZ.AAB301%type; --参保地行政区划 LS_aab301_mc SF_YBJKRZ.AAB301_MC%type; --参保地行政区划名称 LS_bka531 SF_YBJKRZ.BKA531%type; --是否精准扶贫对象 Y:是 N:否 LS_bka544 SF_YBJKRZ.BKA531%type; --是否医疗救助(福建 Y:是 N:否) LS_sfjdlk SF_YBJKRZ.SFJDLK%type; --是否贫困人员 1:是 0:否 LS_icztmc SF_YBJKRZ.ICZTMC%type; --IC卡状态名称 LS_gzztmc SF_YBJKRZ.GZZTMC%type; --工作状态名称 LS_psn_type_to_bkc001 SF_YBJKRZ.BKC001%type; --人员待遇类别 LS_bkc001_mc SF_YBJKRZ.BKC001_MC%type; --人员待遇类别名称 LS_psn_insu_stas_to_bkc026 SF_YBJKRZ.BKC026%type; --医疗待遇状态 LS_bkc026_mc SF_YBJKRZ.BKC026_MC%type; --医疗待遇状态名称 LS_bke174 SF_YBJKRZ.BKE174%type; --异地就医类型 LS_bke174_mc SF_YBJKRZ.BKE174_MC%type; --异地就医类型名称 LS_balc_to_akc087 SF_YBJKRZ.AKC087%type; --个人账户余额 LS_insutype_to_aae140 SF_YBJKRZ.AAE140%type; --aae140:险种类型:310 城镇职工基本医疗保险 320:公务员医疗补助 380:新型农村合作医疗 390:城乡居民基本医疗保险 410:工伤保险 510:生育保险 520:机关生育 LS_AAE140_MC SF_YBJKRZ.AAE140_MC%type; --aae140_mc:险种类型名称(城乡居民基本医疗保险、城镇职工基本医疗保险等等) LS_AAC066 SF_YBJKRZ.AAC066%type; --工作状态编码 LS_AAC066_MC SF_YBJKRZ.AAC066_MC%type; --工作状态名称 LS_YNYBMC BM_YBXZQH.YNYBMC%type; --院内医保分中心名称=IC_YBBRLB.YBMC00 LS_mdtrt_cert_no SF_YBJKRZ.mdtrt_cert_no%type; --就诊凭证编号 LS_CBXX_LISTNUM number(10); ---参保信息记录数据 LS_naty SF_YBJKRZ.naty%type; --[国家医保]民族 LS_XMLSTR SF_YBDATA.XMLSTR%type; LS_idetinfo_psn_idet_type varchar2(10);--psn_idet_type 人员身份类别 LS_idetinfo_psn_type_lv varchar2(10);--psn_type_lv 人员类别等级 in_bke284 SF_YBJKRZ.bke284%type;--bke284:福建身份认证类型(01:读卡02:融合码06:医保码20:医疗证) in_aaz500 SF_YBJKRZ.aaz500%type;--aaz500:社会保障卡号 in_aaz501 SF_YBJKRZ.aaz501%type;--aaz501:卡识别码 in_aac002 SF_YBJKRZ.aac002%type;--aac002:证件号码(社会保障号) in_aac003 SF_YBJKRZ.aac003%type;--aac003:姓名 in_mdtrt_cert_type SF_YBJKRZ.mdtrt_cert_type%type; --就诊凭证类型(03:社保卡 01:医保凭证 02:身份证) in_psn_cert_type SF_YBJKRZ.psn_cert_type%type; --psn_cert_type 人员证件类型 in_certno SF_YBJKRZ.certno%type; --certno 证件号码 in_psn_name SF_YBJKRZ.psn_name%type; --psn_name 人员姓名 LS_Check_certno_psn_name varchar2(10);--[国家医保]获取基本信息是否校验姓名和身份证是否同医保返回一致 1:校验 0:不校验 默认:1 LS_exp_content varchar2(250);--扩展参数 LS_jzfp_flag varchar2(10);--是否精准扶贫 1:是 LS_ma_psn_flag varchar2(10);--是否医疗救助 1:是 LS_jzfp_flag_NUM number(10);--精准扶贫临时变量 LS_ma_psn_flag_NUM number(10);--医疗救助临时变量 LS_idetinfo_memo varchar2(250); LS_matIdetCode varchar2(10); LS_TMPNUM number(10); LS_STRNUM number(10); LS_TMPSTR varchar2(250); LS_MEMOSTR varchar2(250); LS_SFJZFP varchar2(1);--是否精准扶贫 1:是,0:否 LS_SFYLJZ varchar2(1);--是否医疗救助 是Y否N TYZDCS_jzfp_flag_ma_psn_flag varchar2(10);--先诊疗后付费院内对照[SFJZFP:是否精准扶贫,SFYLJZ:是否医疗救助] 0:SFJZFP=jzfp_flag,SFYLJZ=ma_psn_flag、1:SFJZFP=jzfp_flag、2:SFYLJZ=jzfp_flag 3:SFJZFP和SFYLJZ都=jzfp_flag 默认:0 LS_cred_pay_flag_NUM number(10);--信用支付标识临时变量 LS_cred_pay_flag varchar2(1);--信用支付标识(1已开通信用协议,0未开通信用协议) cursor CUR_CBXX is select * from SF_YBDATA where YBJKID=PYBJKID and JKJDBM='insuinfo' --and INSUTYPE in ('310','390') --and PSN_INSU_STAS = '1' and rownum=1; --身份信息列表:idetinfo cursor CUR_idetinfo is select XMLSTR,memo from SF_YBDATA where YBJKID=PYBJKID and JKJDBM='idetinfo' ; begin PZXZT00:=0; --输出:执行状态 0:失败 1:成功 POUTXML:=null;--输出:出参(XML) PERRMSG:=null;--输出:错误信息 LS_CBXX_LISTNUM:=0; ---参保信息记录数据 LS_CZRQ00:=to_char(sysdate,'YYYYMMDD'); LS_CZSJ00:=to_char(sysdate,'HH24:MI:SS'); LS_JKZT00:=2;--接口状态 0:HIS请求成功 1:接口交互成功 2:HIS院内更新成功 LS_exp_content:=null;--扩展参数 LS_jzfp_flag:=null;--是否精准扶贫 1:是 LS_ma_psn_flag:=null;--是否医疗救助 1:是 LS_jzfp_flag_NUM:=0;--精准扶贫临时变量 LS_ma_psn_flag_NUM:=0;--医疗救助临时变量 LS_idetinfo_memo:=null; LS_matIdetCode:=null; LS_TMPNUM:=0; LS_STRNUM:=0; LS_TMPSTR:=null; LS_MEMOSTR:=null; LS_cred_pay_flag_NUM:=0;--信用支付标识临时变量 LS_cred_pay_flag:=null;--信用支付标识(1已开通信用协议,0未开通信用协议) --:[国家医保]交易类型 1:直接调用医保DLL 3:调用服务接口 LS_INFNLX:= substrb(SF_XT_GETXMLSTR('INFNLX',PINXML0),1,2); if LS_INFNLX is null then LS_INFNLX:= substrb(SF_XT_GETXMLSTR('INFNLX',POTHER0),1,2); end if; --:请求节点标识 LS_QQJDBS:= substrb(SF_XT_GETXMLSTR('QQJDBS',PINXML0),1,30); if LS_QQJDBS is null then LS_QQJDBS:= substrb(SF_XT_GETXMLSTR('QQJDBS',POTHER0),1,30); end if; --:返回节点标识 LS_FHJDBS:= substrb(SF_XT_GETXMLSTR('FHJDBS',PINXML0),1,30); if LS_FHJDBS is null then LS_FHJDBS:= substrb(SF_XT_GETXMLSTR('FHJDBS',POTHER0),1,30); end if; --Nation_Check_certno_psn_name[国家医保]获取基本信息是否校验姓名和身份证是否同医保返回一致 1:校验 0:不校验 默认:1 LS_Check_certno_psn_name:= nvl(substrb(SF_SF_TYZD00('医保新接口参数设置','Nation_Check_certno_psn_name'),1,10),'1'); LS_YBZXMC := SF_SF_TYZD00('医保新接口参数设置', 'fzxmc0'); --先诊疗后付费院内对照[SFJZFP:是否精准扶贫,SFYLJZ:是否医疗救助] 0:SFJZFP=jzfp_flag,SFYLJZ=ma_psn_flag、1:SFJZFP=jzfp_flag、2:SFYLJZ=jzfp_flag 3:SFJZFP和SFYLJZ都=jzfp_flag 默认:0 TYZDCS_jzfp_flag_ma_psn_flag:= nvl(substrb(SF_SF_TYZD00('医保新接口参数设置','jzfp_flag_ma_psn_flag'),1,10),'0'); if nvl(PBRID00,0)>0 then begin select trim(C.YBMC00) into LS_YNYBMC from BM_BRXXB0 a,IC_YBBRLB C where 1=1 and a.FBBH00=C.FBBH00 and C.YBLB00=A.YBLB00 and a.BRID00=PBRID00; exception when others then LS_YNYBMC:=null; --院内医保分中心名称=IC_YBBRLB.YBMC00 end; end if; --获取发送的信息 begin select a.bke284,a.aaz500,a.aaz501,a.aac002,a.aac003,a.mdtrt_cert_type,a.psn_cert_type,a.certno,a.psn_name into in_bke284,in_aaz500,in_aaz501,in_aac002,in_aac003,in_mdtrt_cert_type,in_psn_cert_type,in_certno,in_psn_name from SF_YBJKRZ a where YBJKID=PYBJKID; exception when others then in_bke284:=null; --01:社保卡 06:医保凭证 in_aaz500:=null;--aaz500:社会保障卡号 in_aaz501:=null;--aaz501:卡识别码 in_aac002:=null;--aac002:证件号码(社会保障号) in_aac003:=null;--aac003:姓名 in_mdtrt_cert_type:=null; --就诊凭证类型(03:社保卡 01:医保凭证 02:身份证) in_psn_cert_type:=null; --psn_cert_type 人员证件类型 in_certno:=null; --certno 证件号码 in_psn_name:=null; --psn_name 人员姓名 end; if in_bke284 is null then in_bke284:=substrb(SF_XT_GETXMLSTR('bke284',PINXML0),1,10);--bke284:福建身份认证类型(01:读卡02:融合码06:医保码20:医疗证) if in_bke284 is null then in_bke284:=substrb(SF_XT_GETXMLSTR('bke284',POTHER0),1,10); end if; end if; if in_aaz500 is null then in_aaz500:=substrb(SF_XT_GETXMLSTR('aaz500',PINXML0),1,30);--aaz500:社会保障卡号 if in_aaz500 is null then in_aaz500:=substrb(SF_XT_GETXMLSTR('aaz500',POTHER0),1,30); end if; end if; if in_aaz501 is null then in_aaz501:=substrb(SF_XT_GETXMLSTR('aaz501',PINXML0),1,50);--aaz501:卡识别码 if in_aaz501 is null then in_aaz501:=substrb(SF_XT_GETXMLSTR('aaz501',POTHER0),1,50); end if; end if; if in_aac002 is null then in_aac002:=substrb(SF_XT_GETXMLSTR('aac002',PINXML0),1,30);--aac002:证件号码(社会保障号) if in_aac002 is null then in_aac002:=substrb(SF_XT_GETXMLSTR('aac002',POTHER0),1,30); end if; end if; if in_aac003 is null then in_aac003:=substrb(SF_XT_GETXMLSTR('aac003',PINXML0),1,50);--aac003:姓名 if in_aac003 is null then in_aac003:=substrb(SF_XT_GETXMLSTR('aac003',POTHER0),1,50); end if; end if; LS_PSN_NAME_TO_AAC003 := substrb(SF_SF_GETYBJKMX(PYBJKID,'aac003','1',LS_FHJDBS),1,50); --psn_name 姓名 varchar2(50) if LS_PSN_NAME_TO_AAC003 is null then LS_PSN_NAME_TO_AAC003 := substrb(SF_SF_GETYBJKMX(PYBJKID,'psn_name','1',LS_FHJDBS),1,50); --psn_name 姓名 varchar2(50) end if; LS_PSN_CERT_TYPE_TO_AAC058 := substrb(SF_SF_GETYBJKMX(PYBJKID,'aac058','1',LS_FHJDBS),1,10); --psn_cert_type 证件类型 varchar2(6) if LS_PSN_CERT_TYPE_TO_AAC058 is null then LS_PSN_CERT_TYPE_TO_AAC058 := substrb(SF_SF_GETYBJKMX(PYBJKID,'psn_cert_type','1',LS_FHJDBS),1,10); --psn_cert_type 证件类型 varchar2(6) end if; LS_AAC058_MC := substrb(SF_XT_GETYBSXZD('psn_cert_type',LS_PSN_CERT_TYPE_TO_AAC058,'3','2'),1,50); --证件类型名称 varchar2(50) LS_CERTNO_TO_AAC002 := substrb(SF_SF_GETYBJKMX(PYBJKID,'aac002','1',LS_FHJDBS),1,50); --certno 证件号码(社会保障号) varchar2(18) if LS_CERTNO_TO_AAC002 is null then LS_CERTNO_TO_AAC002 := substrb(SF_SF_GETYBJKMX(PYBJKID,'certno','1',LS_FHJDBS),1,50); --certno 证件号码(社会保障号) varchar2(18) end if; --取aaz500:社会保障卡号,mdtrt_cert_no:就诊凭证编号 --1:获取医保返回值 LS_mdtrt_cert_no:= substrb(SF_SF_GETYBJKMX(PYBJKID,'mdtrt_cert_no','1',LS_FHJDBS),1,50); --2:返回值不为空,并且是9位直接赋值 if LS_mdtrt_cert_no is not null and lengthb(LS_mdtrt_cert_no)=9 then LS_AAZ500:=substrb(LS_mdtrt_cert_no,1,30); end if; --3:如果aaz500为空,入参不为直接赋值 if LS_AAZ500 is null and in_aaz500 is not null then LS_AAZ500:=substrb(in_aaz500,1,30); end if; --4:如果aaz500为空,AAC002不为空直接赋值 if LS_AAZ500 is null and LS_CERTNO_TO_AAC002 is not null then LS_AAZ500:=substrb(LS_CERTNO_TO_AAC002,1,30); end if; --psn_no 人员编号 varchar2(30) LS_psn_no:=substrb(SF_SF_GETYBJKMX(PYBJKID,'psn_no','1',LS_FHJDBS),1,30); LS_BRDY_TO_AAC006 := substrb(replace(SF_SF_GETYBJKMX(PYBJKID,'aac006','1',LS_FHJDBS),'-',''),1,8); --brdy 出生日期 varchar2(10) YYYY-MM-DD if LS_BRDY_TO_AAC006 is null then LS_BRDY_TO_AAC006 := substrb(replace(SF_SF_GETYBJKMX(PYBJKID,'brdy','1',LS_FHJDBS),'-',''),1,8); --brdy 出生日期 varchar2(10) YYYY-MM-DD end if; LS_GEND_TO_AAC004 := substrb(SF_SF_GETYBJKMX(PYBJKID,'gend','1',LS_FHJDBS),1,10); --gend 性别 varchar2(6) if LS_GEND_TO_AAC004 is null then LS_GEND_TO_AAC004 := substrb(SF_SF_GETYBJKMX(PYBJKID,'aac004','1',LS_FHJDBS),1,10); --gend 性别 varchar2(6) end if; LS_AAC004_MC := substrb(SF_XT_GETYBSXZD('gend',LS_GEND_TO_AAC004,'3','2'),1,50); --性别名称 LS_naty:= substrb(SF_SF_GETYBJKMX(PYBJKID,'naty','1'),1,10); --[国家医保]民族 --解析baseinfo.exp_content(jzfp_flag=1)--begin--- LS_exp_content:= substrb(SF_SF_GETYBJKMX(PYBJKID,'exp_content','1'),1,250); --扩展参数 if LS_exp_content is null then --参考格式:{"jzfp_flag":"1"} begin select substrb(VALUE0,1,250) into LS_exp_content from SF_YBJKMX where YBJKID=PYBJKID and JDBM00='baseinfo' and ZDBM00='exp_content'; exception when others then LS_exp_content:=null; --扩展参数 end; end if; if LS_exp_content is not null then begin LS_exp_content:=substrb(replace(LS_exp_content,'"',''),1,250);--替换:" LS_exp_content:=substrb(replace(LS_exp_content,':','='),1,250);--替换: LS_exp_content:=substrb(substr(LS_exp_content,2,length(LS_exp_content)-2),1,250);--头尾{}去掉 LS_exp_content:=substrb(LS_exp_content||',',1,250);--+, LS_STRNUM:=length(LS_exp_content); LS_jzfp_flag_NUM:=instr(LS_exp_content,'jzfp_flag'||'='); --精准扶贫 LS_ma_psn_flag_NUM:=instr(LS_exp_content,'ma_psn_flag'||'=');--医疗救助 LS_cred_pay_flag_NUM:=instr(LS_exp_content,'cred_pay_flag'||'=');--信用支付标识临时变量 --解析精准扶贫值 if LS_jzfp_flag_NUM>0 then LS_TMPSTR:=substrb(substrb(LS_exp_content,LS_jzfp_flag_NUM,LS_STRNUM-LS_jzfp_flag_NUM+1),1,250); LS_TMPSTR:=substrb(SF_SF_RETURNINDEXEH(LS_TMPSTR,',', 1),1,250); LS_jzfp_flag:=substrb(substr(LS_TMPSTR,instrb(LS_TMPSTR,'=')+1,length(LS_TMPSTR)-instr(LS_TMPSTR,'=')),1,10); end if; --解析医疗救助标识 if LS_ma_psn_flag_NUM>0 then LS_TMPSTR:=substrb(substrb(LS_exp_content,LS_ma_psn_flag_NUM,LS_STRNUM-LS_ma_psn_flag_NUM+1),1,250); LS_TMPSTR:=substrb(SF_SF_RETURNINDEXEH(LS_TMPSTR,',', 1),1,250); LS_ma_psn_flag:=substrb(substr(LS_TMPSTR,instrb(LS_TMPSTR,'=')+1,length(LS_TMPSTR)-instr(LS_TMPSTR,'=')),1,10); end if; --信用支付标识 if LS_cred_pay_flag_NUM>0 then LS_TMPSTR:=substrb(substrb(LS_exp_content,LS_cred_pay_flag_NUM,LS_STRNUM-LS_cred_pay_flag_NUM+1),1,250); LS_TMPSTR:=substrb(SF_SF_RETURNINDEXEH(LS_TMPSTR,',', 1),1,250); LS_cred_pay_flag:=substrb(substr(LS_TMPSTR,instrb(LS_TMPSTR,'=')+1,length(LS_TMPSTR)-instr(LS_TMPSTR,'=')),1,1); end if; exception when others then LS_jzfp_flag:=null; LS_ma_psn_flag:=null; LS_cred_pay_flag:=null;--信用支付标识(1已开通信用协议,0未开通信用协议) end; end if; --解析baseinfo.exp_content(jzfp_flag=1)--end--- for c_cbxx in CUR_CBXX loop LS_PSN_INSU_DATE_TO_AAB050 := substrb(replace(c_cbxx.PSN_INSU_DATE,'-',''),1,8); --psn_insu_date 个人参保日期 ls_aab001 := null; LS_EMP_NAME_TO_AAB004 := c_cbxx.EMP_NAME; LS_aab034 := c_cbxx.INSUPLC_ADMDVS; --所属经办机构编码(分中心) if LS_AAB034 is not null and LS_YNYBMC is not null then select count(1) into LS_COUNT0 from BM_YBXZQH where ADMDVS_CODE=LS_AAB034; if nvl(LS_COUNT0,0)>0 then update BM_YBXZQH set YNYBMC=substrb(LS_YNYBMC,1,100) where ADMDVS_CODE=LS_AAB034 and YNYBMC is null; end if; end if; ls_aab034_mc := substrb(SF_XT_GETBMYBXZQH(LS_AAB034,'2'),1,50); --所属经办机构编码名称 ls_insuplc_admdvs_to_aab301 := c_cbxx.INSUPLC_ADMDVS; --参保地医保区划 ls_aab301_mc := substrb(SF_XT_GETBMYBXZQH(LS_INSUPLC_ADMDVS_TO_AAB301,'1'),1,50); --参保地行政区划名称 ls_bka531 := null; --是否精准扶贫对象 Y:是 N:否 LS_bka544 := null; LS_SFJDLK := null; --是否贫困人员 1:是 0:否 LS_PSN_INSU_STAS_TO_BKC026 := c_cbxx.PSN_INSU_STAS; --psn_insu_stas: 人员参保状态 0:未参保 1:正常参保 2:暂停参保 3:终止参保 if LS_PSN_INSU_STAS_TO_BKC026 is null then LS_PSN_INSU_STAS_TO_BKC026 := '1'; end if; LS_BKC026_MC:= substrb(SF_XT_GETYBSXZD('psn_insu_stas',LS_PSN_INSU_STAS_TO_BKC026,'3','2'),1,50);--人员参保状态(名称) if LS_BKC026_MC is null then if LS_PSN_INSU_STAS_TO_BKC026 = '3' then LS_BKC026_MC := '终止参保'; elsif LS_PSN_INSU_STAS_TO_BKC026 = '2' then LS_BKC026_MC := '暂停参保'; elsif LS_PSN_INSU_STAS_TO_BKC026 = '0' then LS_BKC026_MC := '未参保'; else LS_BKC026_MC := '正常参保'; end if; end if; --0:未参保 1:正常参保 2:暂停参保 3:终止参保 if LS_PSN_INSU_STAS_TO_BKC026 = '3' then LS_ICZTMC := '停保'; elsif LS_PSN_INSU_STAS_TO_BKC026 = '2' then LS_ICZTMC := '暂停'; elsif LS_PSN_INSU_STAS_TO_BKC026 = '0' then LS_ICZTMC := '无效'; else LS_ICZTMC := '有效'; end if; LS_PSN_TYPE_TO_BKC001 := c_cbxx.PSN_TYPE; --psn_type 人员待遇类别 LS_BKC001_MC := substrb(SF_XT_GETYBSXZD('psn_type',LS_PSN_TYPE_TO_BKC001,'3','2'),1,50); --人员待遇类别名称 LS_BKE174 := null; LS_BKE174_MC := null; LS_BALC_TO_AKC087 := c_cbxx.BALC; --个人账户余额 LS_INSUTYPE_TO_AAE140 := c_cbxx.INSUTYPE; --insutype 险种类型 LS_AAE140_MC := substrb(SF_XT_GETYBSXZD('insutype',LS_INSUTYPE_TO_AAE140,'3','2'),1,50); --aae140_mc:险种类型名称(城乡居民基本医疗保险、城镇职工基本医疗保险等等) LS_AAC066 := LS_PSN_TYPE_TO_BKC001; LS_AAC066_MC := LS_BKC001_MC; LS_GZZTMC := LS_BKC001_MC; LS_CBXX_LISTNUM:=nvl(LS_CBXX_LISTNUM,0)+1; ---参保信息记录数据 end loop; ---参保信息记录数据,报错 if nvl(LS_CBXX_LISTNUM,0)=0 then PZXZT00:=0; --输出:执行状态 0:失败 1:成功 PERRMSG:='参保异常,请核对参保对应医保卡所在地的参保信息!接口未返回有效的(参保信息列表:insuinfo)'; --输出:错误信息 return; end if; --2024.03.28 如果请求报文和返回报文中psn_cert_type:人员证件类型<>01 不校验 if nvl(in_psn_cert_type,'01') not in ('01') and nvl(LS_PSN_CERT_TYPE_TO_AAC058,'01') not in ('01') then LS_Check_certno_psn_name:='0'; end if; --[国家医保]获取基本信息是否校验姓名和身份证是否同医保返回一致 1:校验 0:不校验 默认:1 if nvl(LS_Check_certno_psn_name,'1') not in ('0') then --校验姓名 if trim(in_psn_name) is not null and trim(LS_PSN_NAME_TO_AAC003) is not null and trim(in_psn_name)<>trim(LS_PSN_NAME_TO_AAC003) then PZXZT00:=0; --输出:执行状态 0:失败 1:成功 PERRMSG:='医保接口数据校验失败!医保返回的人员姓名跟院内发送的不一致,医保返回:['||trim(LS_PSN_NAME_TO_AAC003)||'],院内发送:['||trim(in_psn_name)||']'; return; end if; --校验证件编码 if in_bke284 in ('01') or in_mdtrt_cert_type in ('03') then if trim(in_certno) is not null and trim(LS_CERTNO_TO_AAC002) is not null and upper(trim(in_certno))<>upper(trim(LS_CERTNO_TO_AAC002)) then PZXZT00:=0; --输出:执行状态 0:失败 1:成功 PERRMSG:='医保接口数据校验失败,错误原因:医保返回的证件号码跟院内发送的不一致,医保返回:['||trim(LS_CERTNO_TO_AAC002)||']院内发送:['||trim(in_certno)||']'; return; end if; end if; end if; if LS_AAB034_MC is null then LS_AAB034_MC := LS_YBZXMC; end if; if LS_AAB034_MC is null and LS_AAB301_MC is not null then LS_AAB034_MC := LS_AAB301_MC; end if; --解析身份信息列表(节点标识:idetinfo) for C_LIST in CUR_idetinfo loop LS_idetinfo_memo:=substrb(C_LIST.memo,1,250); LS_XMLSTR:=C_LIST.XMLSTR; LS_matIdetCode:=null; LS_MEMOSTR:=null; LS_idetinfo_psn_idet_type:=null;--psn_idet_type 人员身份类别 LS_idetinfo_psn_type_lv :=null;--psn_type_lv 人员类别等级 LS_idetinfo_psn_idet_type:=substrb(SF_SF_GETXMLNOTE('psn_idet_type',LS_XMLSTR),1,10);--psn_idet_type 人员身份类别 LS_idetinfo_psn_type_lv :=substrb(SF_SF_GETXMLNOTE('psn_type_lv',LS_XMLSTR),1,10);--psn_type_lv 人员类别等级 --解析idetinfo.memo.matIdetCode--begin-- if LS_idetinfo_memo is not null then begin LS_idetinfo_memo:=substrb(replace(LS_idetinfo_memo,'"',''),1,250);--替换:" LS_idetinfo_memo:=substrb(replace(LS_idetinfo_memo,':','='),1,250);--替换: LS_idetinfo_memo:=substrb(substr(LS_idetinfo_memo,2,length(LS_idetinfo_memo)-2),1,250);--头尾{}去掉 LS_idetinfo_memo:=substrb(LS_idetinfo_memo||',',1,250);--+, LS_STRNUM:=length(LS_idetinfo_memo); LS_TMPNUM:=instr(LS_idetinfo_memo,'matIdetCode'||'='); if LS_TMPNUM>0 then LS_MEMOSTR:=substrb(substrb(LS_idetinfo_memo,LS_TMPNUM,LS_STRNUM-LS_TMPNUM+1),1,250); LS_MEMOSTR:=substrb(SF_SF_RETURNINDEXEH(LS_MEMOSTR,',', 1),1,250); LS_matIdetCode:=substrb(substr(LS_MEMOSTR,instrb(LS_MEMOSTR,'=')+1,length(LS_MEMOSTR)-instr(LS_MEMOSTR,'=')),1,10); end if; exception when others then LS_MEMOSTR:=null; end; end if; --解析idetinfo.memo.matIdetCode--end-- --2022.04.19 以jzfp_flag节点为准,注释掉该代码 /* --1101接口返回的idetinfo 身份类型为( '236103', '236113','236109','2302','236111' ) 的人员为精准扶贫人员 if LS_idetinfo_psn_idet_type in ('236103', '236113','236109','2302','236111' ) or LS_matIdetCode in ('236103', '236113','236109','2302','236111' ) then LS_BKA531:='Y';--是否精准扶贫对象 Y:是 N:否 LS_SFJZFP:='1';--是否精准扶贫 1:是,0:否 end if; */ end loop; --解析baseinfo.exp_content(jzfp_flag=1),参考格式:{"jzfp_flag":"1"} if LS_jzfp_flag is not null then if LS_jzfp_flag in ('1') then LS_BKA531:='Y';--是否精准扶贫对象 Y:是 N:否 LS_SFJZFP:='1';--是否精准扶贫 1:是,0:否 else LS_BKA531:='N';--是否精准扶贫对象 Y:是 N:否 LS_SFJZFP:='0';--是否精准扶贫 1:是,0:否 end if; end if; --先诊疗后付费院内对照[SFJZFP:是否精准扶贫,SFYLJZ:是否医疗救助] 0:SFJZFP=jzfp_flag,SFYLJZ=ma_psn_flag、1:SFJZFP=jzfp_flag、2:SFYLJZ=jzfp_flag 3:SFJZFP和SFYLJZ都=jzfp_flag 默认:0 if TYZDCS_jzfp_flag_ma_psn_flag='3' then if LS_jzfp_flag in ('1') then LS_SFJZFP:='1';--是否精准扶贫 1:是,0:否 LS_SFYLJZ:='Y';--是否医疗救助 是Y否N LS_bka531:='Y';--是否精准扶贫(福建 Y:是 N:否) LS_bka544:='Y';--是否医疗救助(福建 Y:是 N:否) else LS_SFJZFP:='0';--是否精准扶贫 1:是,0:否 LS_SFYLJZ:='N';--是否医疗救助 是Y否N LS_bka531:='N';--是否精准扶贫(福建 Y:是 N:否) LS_bka544:='N';--是否医疗救助(福建 Y:是 N:否) end if; elsif TYZDCS_jzfp_flag_ma_psn_flag='2' then if LS_jzfp_flag in ('1') then LS_SFJZFP:='0';--是否精准扶贫 1:是,0:否 LS_SFYLJZ:='Y';--是否医疗救助 是Y否N LS_bka531:='N';--是否精准扶贫(福建 Y:是 N:否) LS_bka544:='Y';--是否医疗救助(福建 Y:是 N:否) else LS_SFJZFP:='0';--是否精准扶贫 1:是,0:否 LS_SFYLJZ:='N';--是否医疗救助 是Y否N LS_bka531:='N';--是否精准扶贫(福建 Y:是 N:否) LS_bka544:='N';--是否医疗救助(福建 Y:是 N:否) end if; elsif TYZDCS_jzfp_flag_ma_psn_flag='1' then if LS_jzfp_flag in ('1') then LS_SFJZFP:='1';--是否精准扶贫 1:是,0:否 LS_SFYLJZ:='N';--是否医疗救助 是Y否N LS_bka531:='Y';--是否精准扶贫(福建 Y:是 N:否) LS_bka544:='N';--是否医疗救助(福建 Y:是 N:否) else LS_SFJZFP:='0';--是否精准扶贫 1:是,0:否 LS_SFYLJZ:='N';--是否医疗救助 是Y否N LS_bka531:='N';--是否精准扶贫(福建 Y:是 N:否) LS_bka544:='N';--是否医疗救助(福建 Y:是 N:否) end if; else if LS_jzfp_flag in ('1') then LS_bka531:='Y';--是否精准扶贫对象(福建 Y:是 N:否) LS_SFJZFP:='1';--是否精准扶贫 1:是,0:否 else LS_bka531:='N';--是否精准扶贫对象(福建 Y:是 N:否) LS_SFJZFP:='0';--是否精准扶贫 1:是,0:否 end if; if LS_ma_psn_flag in ('1') then LS_bka544:='Y';--是否医疗救助(福建 Y:是 N:否) LS_SFYLJZ:='Y';--是否医疗救助 是Y否N else LS_bka544:='N';--是否医疗救助(福建 Y:是 N:否) LS_SFYLJZ:='N';--是否医疗救助 是Y否N end if; end if; --修改日志表 update SF_YBJKRZ set JKZT00=LS_JKZT00, BRXM00=nvl(LS_PSN_NAME_TO_AAC003,BRXM00), --BRXM00:病人姓名 aac003=LS_PSN_NAME_TO_AAC003, --[福建]aac003:姓名=[国家]psn_name:人员姓名 psn_name=LS_PSN_NAME_TO_AAC003, --[国家]psn_name:人员姓名 aac058=LS_PSN_CERT_TYPE_TO_AAC058, --[福建]aac058:证件类型=[国家]psn_cert_type:人员证件类型 psn_cert_type=LS_PSN_CERT_TYPE_TO_AAC058, --[国家]psn_cert_type:人员证件类型 aac058_mc=LS_AAC058_MC, --[福建]aac058_mc:证件类型名称 aac002=LS_CERTNO_TO_AAC002, --[福建]aac002:证件号码(社会保障号)=[国家]certno:证件号码 certno=LS_CERTNO_TO_AAC002, --[国家]certno:证件号码 aaz500=nvl(LS_AAZ500,AAZ500), --[福建]aaz500:社会保障卡号 aac999=substrb(LS_psn_no,1,30), --[福建]aac999:个人管理码 psn_no=substrb(LS_psn_no,1,30), --[国家]psn_no:人员编号 aac006=LS_BRDY_TO_AAC006, --[福建]aac006:出生日期(YYYYMMDD)=[国家]brdy:出生日期 brdy=LS_BRDY_TO_AAC006, --[国家]brdy:出生日期 aac004=LS_GEND_TO_AAC004, --[福建]aac004:性别=[国家]gend:性别 gend=LS_GEND_TO_AAC004, --[国家]gend:性别 aac004_mc=LS_AAC004_MC, --[福建]aac004_mc:性别名称 aab050=LS_PSN_INSU_DATE_TO_AAB050, --[福建]aab050:参保日期(享受待遇日期) aab001=LS_AAB001, --[福建]aab001:单位编号 aab004=LS_EMP_NAME_TO_AAB004, --[福建]aab004:单位名称 aab034=LS_AAB034, --[福建]aab034:所属经办机构编码(分中心) aab034_mc=LS_AAB034_MC, --[福建]aab034_mc:所属经办机构编码名称 aab301=LS_INSUPLC_ADMDVS_TO_AAB301, --[福建]aab301 参保地行政区划=[国家]insuplc_admdvs 参保地医保区划 insuplc_admdvs=LS_INSUPLC_ADMDVS_TO_AAB301,--[国家]insuplc_admdvs 参保地医保区划 aab301_mc=LS_AAB301_MC, --[福建]aab301_mc 参保地行政区划名称 bka531=LS_BKA531, --[福建]bka531 是否精准扶贫对象 sfjdlk=LS_SFJDLK, icztmc=LS_ICZTMC, gzztmc=LS_GZZTMC, bkc001=LS_PSN_TYPE_TO_BKC001, --[福建]bkc001 人员待遇类别 psn_type=LS_PSN_TYPE_TO_BKC001, --[国家]psn_type 人员类别 bkc001_mc=LS_BKC001_MC, --[福建]bkc001_mc 人员待遇类别名称 bkc026=LS_PSN_INSU_STAS_TO_BKC026, --[福建]bkc026 医疗待遇状态 bkc026_mc=LS_BKC026_MC, --[福建]bkc026_mc 医疗待遇状态名称 bke174=LS_BKE174, --[福建]bke174 异地就医类型 bke174_mc=LS_BKE174_MC, --[福建]bke174_mc 异地就医类型名称 akc087=LS_BALC_TO_AKC087, --[福建]akc087 个人账户余额=[国家]balc 余额 balc=LS_BALC_TO_AKC087, --[国家]balc 余额 aae140=LS_INSUTYPE_TO_AAE140, --[福建]aae140 险种类型=[国家]insutype 险种类型 insutype=LS_INSUTYPE_TO_AAE140, --[国家]insutype 险种类型 aae140_mc=LS_AAE140_MC, --[福建]aae140_mc 险种类型名称 aac066=LS_AAC066, --工作状态编码 aac066_mc=LS_AAC066_MC, --工作状态名称 naty=LS_naty --[国家医保]民族 where YBJKID=PYBJKID; if nvl(PBRID00,0) > 0 then --调用过程SP_XT_BM_ZY_BRQTXX生成生成BM_BRQTXX或ZY_BRQTXX:SP_XT_BM_ZY_BRQTXX SP_XT_BM_ZY_BRQTXX(PBRID00,0,PCZY000,PCOMMIT,''); --更新BM_BRXXB0 update BM_BRXXB0 set bkc001_mc=nvl(LS_BKC001_MC,BKC001_MC) ,--人员待遇类别名称(城乡居民、普通在职人员等等) aae140=nvl(LS_INSUTYPE_TO_AAE140,AAE140) ,--险种类型:310 城镇职工基本医疗保险 320:公务员医疗补助 380:新型农村合作医疗 390:城乡居民基本医疗保险 410:工伤保险 510:生育保险 520:机关生育 aae140_mc=nvl(LS_AAE140_MC,AAE140_MC) ,--险种类型名称(城乡居民基本医疗保险、城镇职工基本医疗保险等等) brztqk=nvl(substrb(LS_BKC001_MC,1,40),BRZTQK) ,--病人职退情况名称 ZTQKBH=substrb(nvl(LS_PSN_TYPE_TO_BKC001,ZTQKBH),1,10) ,--病人职退情况编码 psn_no=substrb(nvl(LS_psn_no,psn_no),1,30) ,--psn_no[国家医保]人员编号 xzqh00=substrb(nvl(ls_aab034,xzqh00),1,10) , --行政区号 XBBH00=substrb(nvl(ls_gend_to_aac004,XBBH00),1,2) ,--性别编号 MZBH00=substrb(nvl(LS_naty,MZBH00),1,10) ,--民族编号=VW_BM_naty ZJLXBH=substrb(nvl(ZJLXBH,nvl(ls_psn_cert_type_to_aac058,ZJLXBH)),1,10), --证件类型编号=VW_BM_psn_cert_type SFJZFP=nvl(LS_SFJZFP,SFJZFP) ,--是否精准扶贫 1:是,0:否 SFYLJZ=nvl(LS_SFYLJZ,SFYLJZ) ,--是否医疗救助 是Y否N PSN_INSU_STAS=substrb(nvl(LS_PSN_INSU_STAS_TO_BKC026,PSN_INSU_STAS),1,2) --[国家医保]人员参保状态 0:未参保 1:正常参保 2:暂停参保 3:终止参保 where BRID00=PBRID00; --更新医保账户余额 update SF_BRZHXX set YBZHYE=nvl(LS_BALC_TO_AKC087,0) where BRID00=PBRID00; --门诊医保其它数据:SF_YBDATA update SF_YBDATA set BRID00=PBRID00 where YBJKID=PYBJKID; --修改BM_BRQTXX 病人其它信息表 update BM_BRQTXX set cred_pay_flag=nvl(LS_cred_pay_flag,cred_pay_flag) --信用支付标识:1已开通信用协议,0未开通信用协议 where BRID00=PBRID00; end if; --门诊医保其它数据:SF_YBDATA update SF_YBDATA A set insutype_mc=substrb(SF_XT_GETYBSXZD('insutype',A.insutype,'3','2'),1,100),--[国家医保]险种类型_名称 psn_type_mc=substrb(SF_XT_GETYBSXZD('psn_type',A.psn_type,'3','2'),1,100),--[国家医保]人员类别_名称 psn_insu_stas_mc=substrb(SF_XT_GETYBSXZD('psn_insu_stas',A.psn_insu_stas,'3','2'),1,100),--[国家医保]人员参保状态_名称 cvlserv_flag_mc=substrb(SF_XT_GETYBSXZD('cvlserv_flag',A.cvlserv_flag,'3','2'),1,100),--[国家医保]公务员标志_名称 insuplc_admdvs_mc=substrb(SF_XT_GETBMYBXZQH(a.insuplc_admdvs,'1'),1,100),--[国家医保]参保地医保区划_名称 psn_idet_type_mc=substrb(SF_XT_GETYBSXZD('psn_idet_type',A.psn_idet_type,'3','2'),1,100),--[国家医保]人员身份类别_名称 psn_type_lv_mc=substrb(SF_XT_GETYBSXZD('psn_type_lv',A.psn_type_lv,'3','2'),1,100)--[国家医保]人员类别等级_名称 where YBJKID=PYBJKID; --调用解析接口返回信息:(国家医保:SP_SF_nation_JKFHJX、福建版本:SP_SF_NEWYBJK_JKFHJX) SP_SF_NATION_JKFHJX ( PBRID00 ,--输入:病人ID 0 ,--输入:结账单号 PYBJKID ,--输入:医保接口ID '0' ,--输入:门诊住院标识 0:门诊 1:住院 'A' ,--输入:解析类型(同时解析传1,2) 1:fplist 2:mzlist A:参保资格信息解析 B:生成医保基本信息BM_YBBRXX PCOMMIT ,--输入:是否提交事务 Y:提交 N:不提交 PZXZT00 ,--输出:执行状态 0:失败 1:成功 PERRMSG --输出:错误信息 ); --2023.01.29 --jzfp_flag:是否精准扶贫(国家 1:是 0:否) update SF_YBJKMX set JKFHZ0=LS_jzfp_flag where YBJKID=PYBJKID and JKSXBM='jzfp_flag' and JDBM00='baseinfo_exp_content'; --ma_psn_flag:是否医疗救助(国家 1:是 0:否) update SF_YBJKMX set JKFHZ0=LS_ma_psn_flag where YBJKID=PYBJKID and JKSXBM='ma_psn_flag' and JDBM00='baseinfo_exp_content'; --cred_pay_flag:信用支付标识:1已开通信用协议,0未开通信用协议 update SF_YBJKMX set JKFHZ0=nvl(LS_cred_pay_flag,JKFHZ0) where YBJKID=PYBJKID and JKSXBM='cred_pay_flag' and JDBM00='baseinfo_exp_content'; --bka531:是否精准扶贫(福建 Y:是 N:否) update SF_YBJKMX set JKFHZ0=LS_bka531 where YBJKID=PYBJKID and JKSXBM='bka531' and JDBM00='baseinfo_exp_content'; --bka544:是否医疗救助(福建 Y:是 N:否) update SF_YBJKMX set JKFHZ0=LS_bka544 where YBJKID=PYBJKID and JKSXBM='bka544' and JDBM00='baseinfo_exp_content'; if PCOMMIT='Y' then commit; end if; PZXZT00:=1; --输出:执行状态 0:失败 1:成功 PERRMSG:=null; --输出:错误信息 exception when no_data_found then PZXZT00:=0; PERRMSG:=substrb('门诊医保接口交互确认失败(基本信息获取)!原因:'||sqlerrm,1,200); rollback; when others then PZXZT00:=0; PERRMSG:=substrb('门诊医保接口交互确认失败(基本信息获取)!原因:'||sqlerrm,1,200); rollback; end; / show error; --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%